﻿using System;
using System.Runtime.InteropServices;
using System.Text;

namespace DimsMapper
{
    static class INIConfig
    {
        static readonly string iniConfigFile = ".\\config.ini";
        
        // lpAppName - Раздел-имя,заключенное в квадратные скобки [] и группирующее ключи и значения. 
        // lpKeyName - Значение ключа.Ключ должен быть уникальным только внутри своего раздела. 
        // lpDefault - Возвращаемое значение, если правильное(допустимое) значение не может читаться. 
        // lpReturnedString - Строка фиксированной длины, получаемая при чтении любой строки файла или lpDefault. 
        // nSize - Длина в символах переменной lpReturnedString. 
        // lpFileName - Имя INI-файла для чтения.

        [DllImport("kernel32.dll")]
        private static extern Int32 GetPrivateProfileInt(string lpAppName, string lpKeyName, int lpDefault, string lpFileName);

        [DllImport("kernel32.dll")]
        private static extern Int32 GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);

        // lpString - устанавлимое строковое значение. 

        [DllImport("kernel32.dll")]
        private static extern Int32 WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);


        // Получение строкового параметра из секции
        public static string GetString(string section, string key, string iniPath, string defValue = "")
        {
            StringBuilder buffer = new StringBuilder(260);
            var sLength = GetPrivateProfileString(section, key, defValue, buffer, 260, iniPath); // читаем файл, slength длина получаемой строки
            return buffer.ToString();
        }

        // Получение числового параметра из секции
        public static int GetInt(string section, string key, string iniPath, int defValue = 0)
        {
            return GetPrivateProfileInt(section, key, defValue, iniPath);
        }

        // Запись параметра или секции (возвращает 0 при ошибке в выполнении и 1 при успешном выполнении)
        public static int SetValue(string section, string key, string value, string iniPath)
        {
            return WritePrivateProfileString(section, key, value, iniPath);
        }

        public static string GetConfigString(string section, string key, string defValue = "")
        {
            return GetString(section, key, iniConfigFile, defValue);
        }

        public static int GetConfigInt(string section, string key, int defValue = 0)
        {
            return GetInt(section, key, iniConfigFile, defValue);
        }

        public static int SetConfigValue(string section, string key, string value)
        {
            return SetValue(section, key, value, iniConfigFile);
        }

    }
}
